package pl.edu.agh.ki.ewywiadowka.client;

import java.util.LinkedList;

import pl.edu.agh.ki.ewywiadowka.client.dto.MarkDTO;
import pl.edu.agh.ki.ewywiadowka.client.dto.SystemUserDTO;
import pl.edu.agh.ki.ewywiadowka.client.dto.UserDTO;
import pl.edu.agh.ki.ewywiadowka.client.windows.LoginWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.SearchAttendantWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.SearchClassWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.SearchTeacherWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.SearchStudentWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.attendant.AttendantAbsenceWelcomeWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.attendant.AttendantMarksWelcomeWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.educator.EducatorAbsenceWelcomeWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.educator.EducatorMarksWelcomeWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.secretary.ModifyAttendantWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.secretary.RegisterClassWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.secretary.ModifyStudentWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.secretary.RegisterStudentAttendantWindow;
import pl.edu.agh.ki.ewywiadowka.client.windows.secretary.RegisterTeacherWindow;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DockPanel;

import static pl.edu.agh.ki.ewywiadowka.client.Const.MenuButtonNames.*;

public class MenuClickHandler implements ClickHandler {

	private EWywiadowka _wywiadowka;

	public MenuClickHandler(EWywiadowka wywiadowka) {
		_wywiadowka = wywiadowka;
	}
	
	@Override
	public void onClick(ClickEvent event) {
		Button source = (Button) event.getSource();
		String name = source.getText();

		if (name.equals(LOGIN)) {
			_wywiadowka.putWindow(new LoginWindow(_wywiadowka));
		} else if (name.equals(ADD_CLASS)) {
			_wywiadowka.putWindow(new RegisterClassWindow(_wywiadowka));
		} else if (name.equals(REMOVE_CLASS)) {
			_wywiadowka.putWindow(new SearchClassWindow(_wywiadowka, 2));
		} else if (name.equals(MODIFY_CLASS)) {
			_wywiadowka.putWindow(new SearchClassWindow(_wywiadowka, 1));
		} else if (name.equals(ADD_STUDENT_ATTENDANT)) {
			_wywiadowka.putWindow(new RegisterStudentAttendantWindow(_wywiadowka));
		} else if (name.equals(MODIFY_STUDENT)) {
			_wywiadowka.putWindow(new SearchStudentWindow(_wywiadowka, 1));
		} else if (name.equals(LOG_OUT)) {
			SystemUserDTO systemUser = new SystemUserDTO();
			systemUser.user = new UserDTO("", "", "", null);
			_wywiadowka.setUser(systemUser);
			_wywiadowka.putWindow(new LoginWindow(_wywiadowka));
		} else if (name.equals(REMOVE_STUDENT)) {
			_wywiadowka.putWindow(new SearchStudentWindow(_wywiadowka, 2));
		} else if (name.equals(ADD_TEACHER)) {
			_wywiadowka.putWindow(new RegisterTeacherWindow(_wywiadowka));
		} else if (name.equals(MODIFY_TEACHER)) {
			_wywiadowka.putWindow(new SearchTeacherWindow(_wywiadowka, 1));
		} else if (name.equals(REMOVE_TEACHER)) {
			_wywiadowka.putWindow(new SearchTeacherWindow(_wywiadowka, 2));
		} else if (name.equals(MARKS_SINGLE)) {
			if (_wywiadowka.getAttributes() == Const.Attributes.EDUCATOR)
				_wywiadowka.putWindow(new EducatorMarksWelcomeWindow(_wywiadowka, _wywiadowka._clas, 1));
			else
				_wywiadowka.putWindow(new AttendantMarksWelcomeWindow(_wywiadowka, _wywiadowka._attendant, 1));
		} else if (name.equals(MODIFY_ATTENDANT)) {
			_wywiadowka.putWindow(new SearchAttendantWindow(_wywiadowka, 1));
		} else if (name.equals(REMOVE_ATTENDANT)) {
			_wywiadowka.putWindow(new SearchAttendantWindow(_wywiadowka, 2));
		} else if (name.equals(MARKS_FINAL)) {
			if (_wywiadowka.getAttributes() == Const.Attributes.EDUCATOR)
				_wywiadowka.putWindow(new EducatorMarksWelcomeWindow(_wywiadowka, _wywiadowka._clas, 2));
			else
				_wywiadowka.putWindow(new AttendantMarksWelcomeWindow(_wywiadowka, _wywiadowka._attendant, 2));
		} else if (name.equals(ABSENCE)) {
			if (_wywiadowka.getAttributes() == Const.Attributes.EDUCATOR)
				_wywiadowka.putWindow(new EducatorAbsenceWelcomeWindow(_wywiadowka, _wywiadowka._clas));
			else
				_wywiadowka.putWindow(new AttendantAbsenceWelcomeWindow(_wywiadowka, _wywiadowka._attendant));
			
		} else
			Window.alert("BLAD: Nie ma Okna odpowiadajacego takiemu guzikowi :D");
	}

}
